一.存储过程

语句结构
create procedure pr_add
(

)
begin
  
end;
 //申明变量
 declare c int;
  //if判断语句
 if a is null then
  set a = 0;//set 赋值语句
 end if;

 循环
 //while do end while循环
 while  i<5 do
      ......
 end while;
 //repeat until end repeat循环
 repeat
   insert into t1(filed) values(i);
   set i=i+1;
   until i>=5
 end repeat;
 //loop leave end loop循环
 loop_label: loop
    insert into t1(filed) values(i);
    set i=i+1;
    if i>=5 then
       leave loop_label;
    end if;
 end loop;
注意:
    MySQL 存储过程中的每条语句的末尾,都要加上分号 “;”
    declare c int;    - 这是单行 MySQL 注释 (注意- 后至少要有一个空格)
    变量 使用DECLARE来声明,DEFAULT赋默认值,SET赋值 
    

2.存储过程例子

CREATE PROCEDURE `test`(IN `in_num` VARCHAR(50), IN `out_num` VARCHAR(50))
    LANGUAGE SQL
    NOT DETERMINISTIC
    READS SQL DATA
    SQL SECURITY DEFINER
    COMMENT '测试'
BEGIN
   create temporary table if not exists tem_test
   (
      id varchar(50) primary key,
      name varchar(50),
      age varchar(50)
    )engine = memory;
    begin
        insert into tem_test(id,name,age) values(in_num,in_num,in_num);
        select * from tem_test;
        select count(*) into out_num from tem_test;
    end;
    truncate table tem_test;/**删除临时表**/
END

3.调用存储过程

call procedure();//()必须要加上

二 存储函数

什么是存储函数: 封装一段sql代码,完成一种特定的功能,返回结果。

CREATE  FUNCTION  name_from_employee (emp_id INT )  
          RETURNS VARCHAR(20)  
          BEGIN  
              RETURN  (SELECT  name  
              FROM  employee  
              WHERE  num=emp_id );  
          END 

三存储过程,存储函数的优缺点

一、 存储函数有且只有一个返回值,而存储过程不能有返回值。

二、 函数只能有输入参数,而且不能带in, 而存储过程可以有多个in,out,inout参数。

三、 存储过程中的语句功能更强大,存储过程可以实现很复杂的业务逻辑,而函数有很多限制,
如不能在函数中使用insert,update,delete,create等语句;存储函数只完成查询的工作,可接
受输入参数并返回一个结果,也就是函数实现的功能针对性比较强。

四、 存储过程可以调用存储函数。但函数不能调用存储过程。

五、 存储过程一般是作为一个独立的部分来执行(call调用)。而函数可以作为查询语句的一个部
分来调用。

mmy123456
376 声望17 粉丝

有项目请联系:15201970281(毛毛)